扑克牌Python实现 您所在的位置:网站首页 python 按顺序排序 扑克牌Python实现

扑克牌Python实现

2023-03-19 18:43| 来源: 网络整理| 查看: 265

循环打印九九乘法表

programmer_ada: 推荐 Python入门 技能树:https://edu.csdn.net/skill/python?utm_source=AI_act_python

用栈实现中缀表达式求值

m0_55185016: #include#include#include#define MAX 100 #define Error 0#define True 1typedef int Num;//为防止以后变换操作数类型需要 typedef struct{ Num data[MAX]; int top;}numstack;//数字栈 typedef struct{ char data[MAX]; int top;}charstack;//符号栈 void InitNum(numstack* p){ p->top = 0;//数字栈的初始化}void InitChar(charstack* p){ p->top = 0;//符号栈的初始化}void PushNum(numstack* p, Num e){ if (p->top == MAX) printf("数字栈满!\n"); else { p->data[p->top] = e; p->top++; }}//数字栈入栈void PushChar(charstack* p, char e){ if (p->top == MAX) printf("符号栈满!\n"); else { p->data[p->top] = e; p->top++; }}//符号栈入栈void PopNum(numstack* p, Num* e){ if (p->top == 0) printf("数字栈空!\n"); else { p->top--; *e = p->data[p->top]; }}//数字栈出栈void PopChar(charstack* p, char* e){ if (p->top == 0) printf("符号栈空!\n"); else { p->top--; *e = p->data[p->top]; }}//符号栈出栈void Fun(numstack* p, char e){ Num temp1, temp2;//存放两个临时操作数 PopNum(p, &temp2); PopNum(p, &temp1); switch (e) { case '+':PushNum(p, temp1 + temp2); break; case '-':PushNum(p, temp1 - temp2); break; case '*':PushNum(p, temp1 * temp2); break; case '/':PushNum(p, temp1 / temp2); break; }}//数字栈弹出两个数字进行运算,并将运算结果入数字栈Num GetNum(numstack p){ return p.data[p.top - 1];}//取数字栈栈顶元素int main(){ int i;//循环变量 Num temp;//存放一个临时转换数 char str[MAX], ch;//存放中缀表达式原式,临时运算符 //----------- numstack n1; charstack c1; InitNum(&n1); InitChar(&c1); //------------ for (;;)//可以连续输入 { int j;//判断变量 j = 1; printf("请输入中缀表达式:"); gets(str); //scanf遇到空白字符,包括空格,制表符,换行符时均会停止输入,所以不可取,而gets功能为读入一行,并将换行符转换为字符串结束符。 for (i = 0;str[i] != '\0'; i++)//读完整字符串-----字符串结束标志'\0' { if (str[i] >= '0' && str[i] = '0' && str[i + 1] 0 && c1.data[c1.top - 1] != '(')//将优先级高的运算符先输出计算,其中括号内的优先级最高 { PopChar(&c1, &ch); Fun(&n1, ch);//计算,并压运算数栈 } PushChar(&c1, '+'); } ; break; case '-': if (c1.data[c1.top - 1] != '+' && c1.data[c1.top - 1] != '-' && c1.data[c1.top - 1] != '*' && c1.data[c1.top - 1] != '/') { PushChar(&c1, '-'); } else//如果不然,则将之前的先都出栈并计算,然后再入栈 { while (c1.top > 0 && c1.data[c1.top - 1] != '(')//将优先级高的运算符先输出计算,其中括号内的优先级最高 { PopChar(&c1, &ch); Fun(&n1, ch);//计算,并压运算数栈 } PushChar(&c1, '-'); } ; break; case '*': if (c1.data[c1.top - 1] != '*' && c1.data[c1.top - 1] != '/') { PushChar(&c1, '*'); } else//如果不然,则出栈并计算,然后再入栈,直至*优先级大于栈顶元素优先级 { while (c1.top > 0 && c1.data[c1.top - 1] != '(' && c1.data[c1.top - 1] != '+' && c1.data[c1.top - 1] != '-')//将优先级高的运算符先输出计算,其中括号内的优先级最高 { PopChar(&c1, &ch); Fun(&n1, ch);//计算,并压运算数栈 } PushChar(&c1, '*'); } ; break; case '/': if (c1.data[c1.top - 1] != '*' && c1.data[c1.top - 1] != '/') { PushChar(&c1, '/'); } else//如果不然,则出栈并计算,然后再入栈,直至/优先级大于栈顶元素优先级 { while (c1.top > 0 && c1.data[c1.top - 1] != '(' && c1.data[c1.top - 1] != '+' && c1.data[c1.top - 1] != '-')//将优先级高的运算符先输出计算,其中括号内的优先级最高 { PopChar(&c1, &ch); Fun(&n1, ch);//计算,并压运算数栈 } PushChar(&c1, '/'); } ; break; case '(': PushChar(&c1, '('); ; break; case ')'://并没有将')'压入栈中,只是当作一种出栈信号 while (c1.data[c1.top - 1] != '(') { PopChar(&c1, &ch); Fun(&n1, ch);//计算,并压运算数栈 } PopChar(&c1, &ch);//将'('也出栈,但并不计算 ; break; } } else//其余输入判定为错误 { printf("输入错误\n"); j = 0; break; } } while (c1.top > 0)//将剩余的运算符出栈并计算 { PopChar(&c1, &ch); Fun(&n1, ch); } if (j == 1) { printf("\t\t%s=%d", str, GetNum(n1)); printf("\n"); } else { printf("\n"); } system("pause"); }}

用栈实现中缀表达式求值

m0_55185016: 这个感觉不太对呀,如果扫描到乘号和除号 不应该将之前都出栈运算吧 应该是到他的优先级大于栈顶元素优先级后就可以了吧

十进制转化为八进制和十六进制

GOD548: 请问英文字母怎么变成大写,还有前缀能去掉嘛表情包

用栈实现中缀表达式求值

liuwanyan_: 1+2*5*6会出问题



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有